package com.dragon.modules.yuegou.mapper.order;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dragon.modules.yuegou.entity.order.OrderEntity;
import com.dragon.modules.yuegou.enums.order.OrderStatus;
import com.dragon.modules.yuegou.model.order.Details;
import com.dragon.modules.yuegou.model.order.Order;
import com.dragon.modules.yuegou.query.order.DetailsQuery;
import com.dragon.modules.yuegou.query.order.OrderDetailQuery;
import com.dragon.modules.yuegou.query.order.OrderMemberGradeQuery;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.List;

/**
 * 订单 Mapper接口
 *
 * @author pbuilder generated
 * @date 2019-04-03 13:57:50
 * @version 2.0
 */
@Component("ordOrderMapper")
public interface OrderMapper extends BaseMapper<OrderEntity> {

	/**
	 * 根据条件分页查询订单号
	 * @param page 分页条件
	 * @param query 查询条件
	 * @return 订单号分页列表
	 */
	IPage<String> searchOrderNo(IPage<OrderEntity> page, @Param("query") OrderDetailQuery query);
	
	List<String> searchOrderNo(@Param("query") OrderDetailQuery query);
	
    /**
     * 获取集团商圈订单记录分页列表
     * */
    IPage<Order> search(IPage page,@Param("query") OrderDetailQuery query);

    /**
     * 导出集团商圈订单记录列表
     * */
    List<Order> search(@Param("query") OrderDetailQuery query);

    /**
     * 取消超时订单
     * @param orderNo 订单号
     */
    boolean cancelTimeoutOrder(@Param("orderNo") String orderNo);
    
    /**
     * 取消订单
     * @param orderNo 订单号
     */
    boolean cancelOrder(@Param("orderNo") String orderNo);
    
    
    /**
     * 分页查询商户订单号（已经付款的，按照订单号倒序）
     * @param page 分页信息
     * @param merchantId 商户ID
     * @param skuTitle SKU标题（模糊查询）
     * @param status
     * @return 订单号分页列表
     */
    IPage<String> findMerchantOrder(IPage<OrderEntity> page, 
    		@Param("merchantId") String merchantId,
    		@Param("skuTitle") String skuTitle,
    		@Param("status") OrderStatus status);

    
    IPage<Details> searchDetail(IPage<Details> page,@Param("query") DetailsQuery query);

    /**
     * 导出查询订单明细
     * */
	List<Details> searchDetail(@Param("query")DetailsQuery query);

	/**
	 * @param page 分页信息
     * @param merchantId 商户ID
     * @param term SKU标题（模糊查询）
     * @param status 订单类型
     * @return 订单号分页列表
	 * */
	IPage<Order> deliveryList(IPage<Order> page,@Param("term") String term,@Param("status") OrderStatus status,@Param("merchantId") String merchantId);

	/**
	 * @param page 分页信息
     * @param status 订单类型
     * @return 订单号分页列表
	 * */
	IPage<Order> deliveryLists(IPage<Order> page, @Param("status") OrderStatus status, @Param("busdId") String busdId, @Param("memberId") String memberId);

	/**
	 * @param page 分页信息
     * @param id 会员Id
     * @param busdId 商圈Id
     * @return 订单分页信息
	 * */
	IPage<Order> toBePaidlist(IPage<Order> page,@Param("id") String id,@Param("busdId") String busdId);

	/**
	 * @param page 分页信息
     * @param merchantId 商户ID
     * @param term SKU标题（模糊查询）
     * @param status 订单类型
     * @return 订单号分页列表
	 * */
	IPage<Order> deliveryShippingList(IPage<Order> page,@Param("term") String term,@Param("status") OrderStatus status,@Param("merchantId") String merchantId);

	/**
	 * @param page 分页信息
     * @param merchantId 商户ID
     * @param term SKU标题（模糊查询）
     * @param status 订单类型
     * @return 订单号分页列表
	 * */
	IPage<Order> deliverySucceedList(IPage<Order> page,@Param("term") String term,@Param("status") OrderStatus status,@Param("merchantId") String merchantId);

    List<Order> selectNeedReplenish(@Param("orderNo")String orderNo);

	/**
	 * 获取指定商圈下指定用户id的累计消费金额
	 * @param query
	 * @return
	 */
	BigDecimal getOrderOnlineMoneyByMemberId(@Param("query") OrderMemberGradeQuery query);

	/**
	 * 获取指定商圈下指定用户id的累计消费次数
	 * @param query
	 * @return
	 */
	BigDecimal getOrderConsumeTimesByMemberId(@Param("query") OrderMemberGradeQuery query);

}
